/*
 * CommunicationRobot16.h
 *
 */

#ifndef COMMUNICATIONROBOT16_H_
#define COMMUNICATIONROBOT16_H_

#include "../IPC/MessageQueue.h"
#include "MiddlewareCommon.h"

namespace middleware {

class CommunicationRobot16
{
public:
	typedef enum{ROBOT14=0,DESPACHO}RemitenteRequest;
private:
	struct TomarCajaRequestStruct
	{
		OrdenCompraHeader ordenCompra;
		TipoProducto tipoProducto;
		RemitenteRequest remitente;
	};
	struct DespachoReplyStruct
	{
		OrdenCompraHeader ordenCompra;
		Producto producto;
	};

public:
	CommunicationRobot16();
	virtual ~CommunicationRobot16();

	void obtenerProductoParaDespacho(OrdenCompraHeader &ordenCompra,
										 TipoProducto &tipoProducto,
										 Producto &producto);

	void notificarNuevoProducto();


	void getPedidoRobot16(OrdenCompraHeader &ordenCompra,
			 	 	 	 	 TipoProducto &tipoProducto,
			 	 	 	 	 RemitenteRequest &remitente);

	void entregarProductoDespacho(OrdenCompraHeader &ordenCompra,
			                          Producto &producto);

	//Creacion
	static void create();

	static void destroy();

private:
	ipc::MessageQueue<TomarCajaRequestStruct> m_RequestQueue;
	ipc::MessageQueue<DespachoReplyStruct> m_ReplyQueue;

	static const std::string REQUEST_QUEUE_PATH;
	static const std::string REPLY_QUEUE_PATH;
	static const char REQUEST_QUEUE_KEY = 'a';
	static const char REPLY_QUEUE_KEY = 'b';
};

} /* namespace middleware */
#endif /* COMMUNICATIONROBOT16_H_ */
